#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
FastAPI 应用程序启动入口文件

功能说明:
- 启动FastAPI Web服务器
- 配置服务器参数（主机、端口、调试模式等）
- 提供开发环境的热重载功能
- 集成日志配置

使用方法:
    python main.py
    
访问地址:
    - API文档: http://localhost:8000/docs
    - 健康检查: http://localhost:8000/health
    - 根路径: http://localhost:8000/

作者: API测试团队
版本: 1.0.0
"""

import sys
import uvicorn
from app.main import app
from app.core.config import settings
from utils.logger import get_logger

# 获取日志记录器
logger = get_logger(__name__)


def print_startup_info():
    """
    打印应用启动信息
    显示服务配置和访问地址
    """
    print("\n" + "="*60)
    print(f"🚀 {settings.PROJECT_NAME} 正在启动...")
    print("="*60)
    print(f"📋 项目描述: {settings.PROJECT_DESCRIPTION}")
    print(f"🔢 版本号: {settings.VERSION}")
    print(f"🌐 服务地址: http://{settings.HOST}:{settings.PORT}")
    print(f"📚 API文档: http://{settings.HOST}:{settings.PORT}/docs")
    print(f"🔍 健康检查: http://{settings.HOST}:{settings.PORT}/health")
    print(f"🐛 调试模式: {'开启' if settings.DEBUG else '关闭'}")
    print(f"📝 日志级别: {settings.LOG_LEVEL}")
    print("="*60)
    print("💡 提示: 按 Ctrl+C 停止服务")
    print("="*60 + "\n")


def main():
    """
    主函数 - 启动FastAPI应用服务器
    
    配置说明:
    - host: 服务器监听地址，0.0.0.0表示监听所有网络接口
    - port: 服务器端口号，默认8000
    - reload: 开发模式下启用热重载，代码修改后自动重启
    - log_level: 日志级别，控制日志输出详细程度
    - app: FastAPI应用实例的模块路径
    """
    try:
        # 打印启动信息
        print_startup_info()
        
        # 记录启动日志
        logger.info(f"正在启动 {settings.PROJECT_NAME} v{settings.VERSION}")
        logger.info(f"服务器配置: {settings.HOST}:{settings.PORT}")
        logger.info(f"调试模式: {settings.DEBUG}")
        
        # 启动Uvicorn服务器
        uvicorn.run(
            "app.main:app",  # FastAPI应用实例路径
            host=settings.HOST,  # 监听主机地址
            port=settings.PORT,  # 监听端口
            reload=settings.DEBUG,  # 开发模式热重载
            log_level=settings.LOG_LEVEL.lower(),  # 日志级别
            access_log=True,  # 启用访问日志
            use_colors=True,  # 启用彩色日志输出
        )
        
    except KeyboardInterrupt:
        # 处理用户中断（Ctrl+C）
        logger.info("收到中断信号，正在关闭服务器...")
        print("\n👋 服务已停止，感谢使用！")
        
    except Exception as e:
        # 处理其他异常
        logger.error(f"启动服务器时发生错误: {e}")
        print(f"❌ 启动失败: {e}")
        sys.exit(1)


if __name__ == "__main__":
    # 程序入口点
    # 只有直接运行此文件时才会执行main函数
    main()